﻿using System.Collections.Generic;
using CTS.Com.Domain.Helper;
using CTS.Data.APMenus.Domain.Dao;
using CTS.Data.Domain.Entity;

namespace CTS.Data.APMenus.Domain.Utils
{
    /// <summary>
    /// MenuArgCom
    /// </summary>
    public class MenuArgCom
    {
        private readonly MenuArgComDao _comDao;
        public MenuArgCom() { _comDao = new MenuArgComDao(); }

        /// <summary>
        /// Kiểm tra tồn tại arg
        /// </summary>
        /// <param name="menuCd">Mã menu</param>
        /// <param name="argCd">Mã arg</param>
        /// <param name="ignoreDeleteFlag">Bỏ qua cờ xóa</param>
        /// <returns>True/False</returns>
        public bool IsExist(string menuCd, string argCd, bool ignoreDeleteFlag)
        {
            // Trả về true trong trường hợp tham số là null
            if (DataCheckHelper.IsNull(menuCd)
                || DataCheckHelper.IsNull(argCd)) {
                return true;
            }
            // Kết quả trả về
            return _comDao.IsExist(menuCd, argCd, ignoreDeleteFlag); ;
        }

        /// <summary>
        /// Lấy thông tin arg
        /// </summary>
        /// <param name="menuCd">Mã menu</param>
        /// <param name="argCd">Mã arg</param>
        /// <param name="ignoreDeleteFlag">Bỏ qua cờ xóa</param>
        /// <returns>Thông tin arg</returns>
        public MenuArgInfo GetInfo(string menuCd, string argCd, bool ignoreDeleteFlag)
        {
            // Trả về null trong trường hợp tham số là null
            if (DataCheckHelper.IsNull(menuCd)
                || DataCheckHelper.IsNull(argCd)) {
                return null;
            }
            // Lấy thông tin
            var dataInfo = _comDao.GetInfo(menuCd, argCd, ignoreDeleteFlag);
            // Kết quả trả về
            return DataHelper.CopyObject<MenuArgInfo>(dataInfo);
        }

        /// <summary>
        /// Lấy danh sách arg
        /// </summary>
        /// <param name="ignoreDeleteFlag">Bỏ qua cờ xóa</param>
        /// <returns>Danh sách arg</returns>        
        public IList<MenuArgInfo> GetList(bool ignoreDeleteFlag)
        {
            // Khởi tạo biến cục bộ
            var listResult = new List<MenuArgInfo>();
            // Lấy danh sách arg
            var listInfo = _comDao.GetList(ignoreDeleteFlag);
            // Diệt danh sách arg
            foreach (var info in listInfo) {
                listResult.Add(DataHelper.CopyObject<MenuArgInfo>(info));
            }
            // Kết quả trả về
            return listResult;
        }

        /// <summary>
        /// Lấy danh sách arg
        /// </summary>
        /// <param name="menuCd">Mã menu</param>
        /// <param name="ignoreDeleteFlag">Bỏ qua cờ xóa</param>
        /// <returns>Danh sách arg</returns>        
        public IList<MenuArgInfo> GetList(string menuCd, bool ignoreDeleteFlag)
        {
            // Khởi tạo biến cục bộ
            var listResult = new List<MenuArgInfo>();
            // Lấy danh sách arg
            var listInfo = _comDao.GetList(menuCd, ignoreDeleteFlag);
            // Diệt danh sách arg
            foreach (var info in listInfo) {
                listResult.Add(DataHelper.CopyObject<MenuArgInfo>(info));
            }
            // Kết quả trả về
            return listResult;
        }
    }
}
